package org.xmap.storage;
import java.io.*;
import org.xmap.util.ByteOrder;
/**
 * <p>Description: 简单输出流，可以设置流的方式为大尾或小尾。</p>
 * @author Zealot
 * @version 1.0
 */
public class SimpleOutputStream {
    /**
     * 输出流。
     */
    private DataOutputStream dos;
    /**
     * 读取模式，可以为大尾或小尾。
     */
    private boolean mode;
    /**
     * 指定输出流的构造函数。
     * @param os OutputStream 输出流。
     */
    public SimpleOutputStream(OutputStream os) {
        this.dos = new DataOutputStream(os);
        this.mode = ByteOrder.BIG_ENDIAN; // 默认为大尾，网络字节序
    }
    /**
     * 设置字节序。
     * @param mode boolean true为大尾，网络字节序，false为小尾。
     */
    public void setMode(boolean mode) {
        this.mode = mode;
    }
    /**
     * 写入一个字节。
     * @param data byte 写入流中的数值。
     * @throws IOException io异常。
     */
    public void write(byte data) throws IOException {
        this.dos.writeByte(data);
    }
    /**
     * 写入一个短整形数。
     * @param data short 写入流中的数值。
     * @throws IOException io异常。
     */
    public void writeShort(short data) throws IOException {
        if (this.mode) {
            this.dos.writeShort(data);
        } else {
            this.dos.writeShort(ByteOrder.convert(data));
        }
    }
    /**
     * 写入一个整形数。
     * @param data int 写入流中的数值。
     * @throws IOException io异常。
     */
    public void writeInt(int data) throws IOException {
        if (this.mode) {
            this.dos.writeInt(data);
        } else {
            this.dos.writeInt(ByteOrder.convert(data));
        }
    }
    /**
     * 写入一个长整形。
     * @param data long 写入流中的数值。
     * @throws IOException io异常。
     */
    public void writeLong(long data) throws IOException {
        if (this.mode) {
            this.dos.writeLong(data);
        } else {
            this.dos.writeLong(ByteOrder.convert(data));
        }
    }
    /**
     * 写入指定字节数组。
     * @param data byte[] 指定字节数组。
     * @throws IOException io异常。
     */
    public void write(byte[] data) throws IOException {
        this.dos.write(data);
    }
}
